﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel.Activation;
using System.ServiceModel;
using ibba.src.norisk.Contracts;
using ibba.src.norisk.ServiceImplementation;
using ibba.src.norisk.BusinessLogic;

namespace ibba.src.norisk.ServiceImplementation
{
    [AspNetCompatibilityRequirements(RequirementsMode = System.ServiceModel.Activation.AspNetCompatibilityRequirementsMode.Allowed)]
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession,
                     ConcurrencyMode = ConcurrencyMode.Multiple)]

    class ParametrosReprocessamento : IServiceParametrosReprocessamento
    {
        private ParametrosReprocessamentoBL _parametrosReprocessamentoBL;

        #region IServiceParametrosReprocessamento Members

        public ParametrosReprocessamento()
        {
            try
            {
                _parametrosReprocessamentoBL = new ParametrosReprocessamentoBL();
            }
            catch (Exception ex)
            {
                global.ErrorHandler.LogAndThrowFaultException(ex);
            }
        }

        public List<JustificativaReprocessamento> ObterJustificativaReprocessamento()
        {
            List<JustificativaReprocessamento> retorno = null;

            try
            {
                retorno = TranslateParametrosReprocessamento.Translate(_parametrosReprocessamentoBL.ObterJustificativaReprocessamento());
            }
            catch (Exception ex)
            {
                global.ErrorHandler.LogAndThrowFaultException(ex);
            }

            return retorno;
        }

        public List<ParametrizacaoReprocessamento> ObterParametrizacaoReprocessamento(string cdUsuario, DateTime? dtInclusao, string IcAtivo)
        {
            List<ParametrizacaoReprocessamento> retorno = null;

            try
            {
                retorno = TranslateParametrosReprocessamento.Translate(_parametrosReprocessamentoBL.ObterParametrizacaoReprocessamento(cdUsuario, dtInclusao, IcAtivo));
            }
            catch (Exception ex)
            {
                global.ErrorHandler.LogAndThrowFaultException(ex);
            }

            return retorno;
        }

        public void ExcluirParametrizacaoReprocessamento(int idOrigem, int idReferencia, int idReferenciaReprocessamento, DateTime dtInclusao)
        {
            try
            {
                _parametrosReprocessamentoBL.ExcluirParametrizacaoReprocessamento(idOrigem, idReferencia, idReferenciaReprocessamento, dtInclusao);
            }
            catch (Exception ex)
            {
                global.ErrorHandler.LogAndThrowFaultException(ex);
            }
        }

        public int InserirParametrizacaoReprocessamento(int idMotivo, int idOrigem, int idReferencia, int idReferenciaReprocessamento, string cdProduto, string cdModalidade, string dscObservacao, string codUsuario)
        {
            int retorno = 0;

            try
            {
                retorno = _parametrosReprocessamentoBL.InserirParametrizacaoReprocessamento(idMotivo, idOrigem, idReferencia, idReferenciaReprocessamento, cdProduto, cdModalidade, dscObservacao, codUsuario);
            }
            catch (Exception ex)
            {
                global.ErrorHandler.LogAndThrowFaultException(ex);
            }

            return retorno;
        }

        public int ValidaDataReferencia(DateTime dtReferencia)
        {
            int retorno = 0;

            try
            {
                retorno = _parametrosReprocessamentoBL.ValidaDataReferencia(dtReferencia);
            }
            catch (Exception ex)
            {
                global.ErrorHandler.LogAndThrowFaultException(ex);
            }

            return retorno;
        }

        public List<ParametrizacaoReprocessamento> ObterProdutoModalidadeReprocessamento(int idOrigem, int idReferencia, int idReferenciaReprocessamento, DateTime dtInclusao)
        {
            List<ParametrizacaoReprocessamento> retorno = null;

            try
            {
                retorno = TranslateParametrosReprocessamento.Translate(_parametrosReprocessamentoBL.ObterProdutoModalidadeReprocessamento(idOrigem, idReferencia, idReferenciaReprocessamento, dtInclusao));
            }
            catch (Exception ex)
            {
                global.ErrorHandler.LogAndThrowFaultException(ex);
            }

            return retorno;
        }

        #endregion
    }
}